#include "comm.hpp"
#include "log.hpp"

using namespace std;

int main()
{
    Init init;  // 创建命名管道
    Log log;    // 创建日志对象
    log.Enable(Onefile);  // 设置日志输出到文件

    // 以只读方式打开管道
    int fd = open(FIFO_FILE, O_RDONLY);  // 阻塞等待写入方打开
    if (fd < 0)
    {
        log(Fatal, "error string: %s, error code: %d", strerror(errno), errno);
        exit(FIFO_OPEN_ERR);
    }

    // 记录不同级别的日志
    log(Info, "server open file done, error string: %s, error code: %d", strerror(errno), errno);
    log(Warning, "server open file done, error string: %s, error code: %d", strerror(errno), errno);
    log(Fatal, "server open file done, error string: %s, error code: %d", strerror(errno), errno);
    log(Debug, "server open file done, error string: %s, error code: %d", strerror(errno), errno);

    // 循环读取客户端发送的消息
    while (true)
    {
        char buffer[1024] = {0};
        // read函数从管道(fd)中读取数据
        // sizeof(buffer)指定最多读取的字节数
        // x 存储实际读取的字节数
        int x = read(fd, buffer, sizeof(buffer));
        if (x > 0)  // 读取成功
        {
            buffer[x] = 0; // 在读取到的数据末尾添加字符串结束符'\0'
            cout << "client say# " << buffer << endl; // 打印客户端发送的消息
        }
        else if (x == 0)  // x == 0 表示客户端关闭了连接（发送了EOF）
        {
            log(Debug, "client quit, me too!, error string: %s, error code: %d", strerror(errno), errno); // 记录日志，包含错误信息和错误码
            break;
        }
        else  // 读取错误
            break;
    }

    close(fd);  // 关闭管道
    return 0;
}